約 4,100,606 件
https://w.atwiki.jp/coraljapan/pages/32.html
2010年07月28日 (水) 10時07分59秒; EXCEL覚え書き EXCEL覚え書きクリックしたセルの色を変更する スクロール位置を先頭に戻す 印刷範囲を可変設定にする 相対パスで指定する ボタンの行位置を知る 自分自身を削除する。 フォルダ内のexcelファイルを検索する(サブフォルダも検索) セルがエラーかどうか調べる ユーザーフォームの表示位置を画面サイズの右側にする 定期的にマクロを実行する ファイルダイアログでファイル名を取得する 指定の表示形式を返す ファイルがあるかどうかチェックする 入力規則である条件では入力できないようにする 処理中にWAITを入れる VBAでファイルコピー、移動 VBAでホームページを開く ユーザーフォームのTextBox1にセットする ユーザーフォームと変数をやり取りする 他のブックのマクロを実行する 既存のブックをコピーする ブックを読み取り専用で開く 別のブックのセルの値を取得する(ユーザフォーム) アクティブなブックを閉じる ブックをアクティブにする ブックを保存する ブックを別名で保存する 他のブックのシートのセルの値を取得(リンク方式) 他のブックのシートのセルの値を取得 開いているブックを見えなくする 指定したブックが開いているか調べる エクセルを終了する 条件が一致したときのみ、コントロールを表示する ユーザーフォームにコンボボックスを作成する 乱数を発生させるマクロ ユーザーフォーム出現位置を設定する 覚えておくと便利なショートカットキーのこと CALL ステートメントと、引数 2つのテキストファイルの比較 テキストファイルの内容をセルに読み込む マクロ 文字列をテキストファイルへ書き出す マクロ 処理実行中のカーソルを砂時計にする セルの値を簡易棒グラフで表示する エクセルで早口言葉? ユーザーフォームのテキストボックス内での制御プロパティ ユーザーフォームのテキストボックス内で改行する。 Format関数 ユーザーフォームをモードレスで表示する ユーザーフォームで簡易プログレスバーをつくる。 DATEVALUE関数とTIMEVALUE関数 YEAR関数 実行中のマクロを強制終了する。 他のシートのセルの内容を取得する マクロ シートがアクティブになったら、指定したマクロを実行する。 曜日まで表示する表示形式設定 シート名一覧を取得するマクロ その2 データの最終行を知る マクロ フォルダのコピー マクロ 文字列の操作 選択したフォルダ内のファイル一覧を取得するマクロ ブックの共有操作のマクロ メッセージボックスのアイコン セル範囲指定で絶対的な座標で指定する メッセージボックスで改行する ステータスバーに表示するマクロ 実行中の自動計算をオフにするマクロ 実行中の画面の更新を無効にする 指定した文字列が含まれる行以外を削除するマクロ 24時間を越える場合のマクロでの記述 アクティブシートの名前を変更するマクロ アクティブブックのシートをコピーするマクロ ワークシートを別のBOOKへ保存するマクロ 「はい」「いいえ」ダイアログを表示するマクロ 複数条件のカウント SUMPRODUCT関数 その2 複数条件のカウント SUMPRODUCT関数 シリアル値から日付データ「年」「月」「日」を取り出す 範囲内の最大値、最小値を求める BOOKを開いたら、マクロを自動で実行する ラベルへジャンプするマクロ アクティブセルの位置を調べるマクロ シートをアクティブにするマクロ ワークブックを開くマクロ アクティブセルの内容を取得するマクロ 指定したセルに値を代入するマクロ 指定範囲内のセルに値を代入するマクロ シート名の一覧を表示するマクロ セルにアクティブシート名を表示する 重複データを削除する 条件にあったものの合計 クリックした図形のセルの色を変えるマクロ セルに時間を記録するマクロ =COUNTIF関数 条件付書式 IF関数 セルのコピー&貼り付け セル内の文字列をリスト形式で選択 クリックしたセルの色を変更する (シート内のModuleに) Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) ActiveSheet.Rows.Interior.ColorIndex = xlNone Rows(Target.Row).Interior.ColorIndex = 15 End Sub (指定した行のみ動作させる) Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) If ActiveCell.Row 4 Then Exit Sub ActiveSheet.Rows("4 104").Interior.ColorIndex = xlNone Rows(Target.Row).Interior.ColorIndex = 15 End Sub スクロール位置を先頭に戻す ActiveWindow.ScrollColumn = 1 ActiveWindow.ScrollRow = 1 印刷範囲を可変設定にする 1.メニュー>挿入>名前>定義>を選択する。 2.名前定義ダイアログで、Print_Areaを選択する。 3.参照範囲に「=OFFSET($A$1,0,0,COUNTA($A $A),100)」を入力する。 A列のデータ行の数によって、印刷範囲が可変する。 【OFFSET関数】OFFSET(基準, 行数, 列数, 高さ, 幅) 相対パスで指定する 変数 = ThisWorkbook.Path Workbooks.Open (変数 "\..\test.xls") ボタンの行位置を知る bt = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row 自分自身を削除する。 Sub test() With ThisWorkbook .Save .ChangeFileAccess Mode =xlReadOnly Kill .FullName .Close (False) End With End Sub フォルダ内のexcelファイルを検索する(サブフォルダも検索) Sub test() フォルダを検索してxlsファイル特定する Dim f, buf As String, cnt As Long, FSO Set FSO = CreateObject("Scripting.FileSystemObject") With Application.FileSearch .NewSearch .Filename = "*.xls" ファイル名 .LookIn = "D \data" フォルダ名 .SearchSubFolders = True サブフォルダも検索する If .Execute() 0 Then For Each f In .FoundFiles path_name = FSO.GetFile(f).ParentFolder パス file_name = FSO.GetFile(f).Name ファイル名 MsgBox path_name "\" file_name Next f End If End With Set FSO = Nothing End Sub セルがエラーかどうか調べる Set rg = Range("A1") If Application.WorksheetFunction.IsError(rg) Then 処理 End If ユーザーフォームの表示位置を画面サイズの右側にする Private Sub UserForm_Activate() Me.Left = Application.Left + Application.Width - Me.Width Me.Top = Application.Top + (Application.Height - Me.Height) / 2 End Sub 定期的にマクロを実行する 1秒ごとにA1に現在時刻を表示 OnTime開始 Sub timer_start() Application.OnTime Now + TimeValue("00 00 01"), "timer_start" Range("A1") = Now() End Sub OnTimeキャンセル Sub timer_stop() On Error Resume Next Application.OnTime Now + TimeValue("00 00 01"), "timer_start", schedule =False End Sub 10秒ごとに10回先まで予約 Sub test() For i = 1 To 10 Application.OnTime Now + TimeValue("00 00 10") * i, "my_Procedure" Next i End Sub Sub my_Procedure() MsgBox "きたー" End Sub ファイルダイアログでファイル名を取得する fname = Application.GetOpenFilename( _ Title ="取り込みファイルの選択") If fname = False Then Exit Sub Msgbox fname End If 指定の表示形式を返す Format(Now(), "yymmdd") ファイルがあるかどうかチェックする Sub filechk strWrk= ここにパス記入 strFile=ここはファイル名 If Dir(strWrk strFil) = "" Then MsgBox("ファイルありません") End If End Sub 入力規則である条件では入力できないようにする A1がバナナか、リンゴか、みかんのときで、なおかつ、B1が食べる以外のときは入力できないようにする。 データの入力規則で、 設定をユーザ定義 数式に、 =OR(AND(A1 "バナナ",A1 "リンゴ",A1 "みかん"),B1="食べる") 処理中にWAITを入れる Application.Wait [NOW()+"0 00 00.01"] 1/100秒停止 VBAでファイルコピー、移動 ファイルコピー Option Explicit Private Const cnsSOUR = "C \AAA\SAMPLE1.txt" 元ファイル Private Const cnsDEST = "C \BBB\SAMPLE2.txt" 先ファイル ファイルコピーのサンプル Sub COPY_SAMPLE() ファイルをコピー FileCopy cnsSOUR, cnsDEST End Sub パスを含めた名前で指定する。 ファイル移動(コピーして元ファイル削除) Option Explicit Private Const cnsSOUR = "C \AAA\SAMPLE1.txt" 元ファイル Private Const cnsDEST = "C \BBB\SAMPLE2.txt" 先ファイル ファイル移動のサンプル② Sub MOVE_SAMPLE2() ファイルをコピー FileCopy cnsSOUR, cnsDEST 元ファイルを削除 Kill cnsSOUR End Sub VBAでホームページを開く Sub Sample() Shell "EXPLORER.EXE http //google.co.jp/" End Sub ユーザーフォームのTextBox1にセットする UserForm1.TextBox1 = "てきすと" ユーザーフォームと変数をやり取りする 標準モジュールの先頭に、呼出し元のプロシージャとユーザフォームで共用したい変数名をPublicでセットします。 Public aaa, bbb Sub test() aaa = 3000 UserForm1.Show vbModeless MsgBox bbb End Sub Private Sub UserForm_Initialize() TextBox1.Text = aaa bbb = 500 End Sub 他のブックのマクロを実行する Application.Run "book1.xls!test" ※引数を渡す場合は、 Application.Run " book1.xls !test",aaa,bbb 例) 元ブック Workbooks.Open Filename =("sample.xls") hiki1 = "りんご" hiki2 = "おいしい" Application.Run "sample.xls!ringo", hiki1, hiki2 先ブック Sub ringo(hiki1, hiki2) With UserForm1 .TextBox1 = hiki1 .TextBox2 = hiki2 .Show End With End Sub 既存のブックをコピーする Sub bkcopy() wp = ThisWorkbook.Path Workbooks.Open Filename =(wp "\aaaa.xlsx"), ReadOnly =True Application.DisplayAlerts = False Workbooks("aaaa.xlsx").Activate ActiveWorkbook.SaveAs Filename =wp "\bbbb.xls" Application.DisplayAlerts = True ActiveWorkbook.Close End Sub ブックを読み取り専用で開く Workbooks.Open Filename =("BBB.xls"), ReadOnly =True 別のブックのセルの値を取得する(ユーザフォーム) Private Sub UserForm_Initialize() wp = ThisWorkbook.Path Workbooks.Open Filename =(wp + "\aaaa"), ReadOnly =True with Workbooks("aaaa.xlsx") msg = .Sheets(1).Range("a1") .Windows(1).Visible = True .Close End with TextBox1 = msg End Sub アクティブなブックを閉じる ActiveWorkbook.Close ブックをアクティブにする Workbooks("sample.xls).Activate ブックを保存する ActiveWorkbook.Save ブックを別名で保存する ActiveWorkbook.SaveAs "Sample.xls" 他のブックのシートのセルの値を取得(リンク方式) Range("a1") = "= " "c \" "[" "サンプル.xls" "]シート1 !" Range("a1") 他のブックのシートのセルの値を取得 Workbooks.Open Filename =("サンプル.xls"), ReadOnly =True Range("a1") = Workbooks("サンプル.xls").Sheets(1).Range("a1") ActiveWorkbook.Close 開いているブックを見えなくする Workbooks("aaaa.xlsx").Windows(1).Visible = False 指定したブックが開いているか調べる Sub Sample15() Dim wb As Workbook, flag As Boolean For Each wb In Workbooks If wb.Name = "Book1.xls" Then flag = True Next wb If flag = True Then MsgBox "開いています。" Else MsgBox "開いていません。" End If End Sub エクセルを終了する Application.Quit 条件が一致したときのみ、コントロールを表示する 例)ComboBox1が"あり"に選択のとき、ComboBox2を表示 Private Sub ComboBox1_Change() If ComboBox1 = "あり" Then ComboBox2.Visible = True Exit Sub End If End Sub ユーザーフォームにコンボボックスを作成する 1.ユーザーフォームにツールボックスからコンボボックスを作成する。 2.Initialize()にコンボボックスの文字列を羅列する。 Private Sub UserForm_Initialize() With ComboBox1 .AddItem "リスト1" .AddItem "リスト2" .AddItem "リスト3" .AddItem "リスト4" End With End Sub 乱数を発生させるマクロ Randomize rnd1 = Int(Rnd * 99999999 + 1) ※99999999は0~99999999の乱数 ユーザーフォーム出現位置を設定する Private Sub UserForm_Initialize() Me.StartUpPosition = 0 Me.Left = 20 Me.Top = 10 End Sub 覚えておくと便利なショートカットキーのこと その1 現在日付を入力 〔CTRL〕+〔;〕 その2 現在時刻を入力 〔CTRL〕+〔:〕 その3 関数の引数を表示 〔CTRL〕+〔SHIFT〕+〔A〕 たとえば、数式バーに=IFと入力してから、〔CTRL〕+〔SHIFT〕+〔A〕と押すと、=IF(論理式,真の場合,偽の場合)と表示される。 その4 書式のみのコピペ 〔CTRL〕+〔SHIFT〕+〔C〕書式のみコピー 〔CTRL〕+〔SHIFT〕+〔V〕書式のみペースト CALL ステートメントと、引数 他のマクロを呼び出すときに、変数を受け渡す場合は、以下を参考。 Sub test() Call メッセージ表示("あははは") End Sub Sub メッセージ表示(moji) MsgBox moji End Sub 複数受け渡す場合は、カンマで区切って列挙する。 Sub test() Call メッセージ表示("あははは", "いひひひ", "うふふふ") End Sub Sub メッセージ表示(moji1, moji2, moji3) MsgBox moji1 MsgBox moji2 MsgBox moji3 End Sub 2つのテキストファイルの比較 A.txtとB.txtを行ごとに比較します。 Sub 比較() Dim strREC_A As String Dim strREC_B As String Dim File_A As String Dim File_B As String Dim ForderPass As String Dim CT As Long ForderPass = ThisWorkbook.Path File_A = "\A.txt" File_B = "\B.txt" Open ForderPass File_A For Input As #1 Open ForderPass File_B For Input As #2 CT = 1 st If EOF(1) Or EOF(2) Then GoTo owari End If Line Input #1, strREC_A Line Input #2, strREC_B If strREC_A strREC_B Then MsgBox CT "行目 違う。" vbCrLf strREC_A vbCrLf strREC_B End If CT = CT + 1 GoTo st owari Close #1 Close #2 MsgBox "終了。" End Sub テキストファイルの内容をセルに読み込む マクロ Sub READ_TextFile() Const cnsFILENAME = "\sample.txt" Dim intFF As Integer FreeFile値 Dim strREC As String 読み込んだレコード内容 Dim GYO As Long 収容するセルの行 FreeFile値の取得(以降この値で入出力する) intFF = FreeFile 指定ファイルをOPEN(入力モード) Open ThisWorkbook.Path cnsFILENAME For Input As #intFF GYO = 1 ファイルのEOF(End of File)まで繰り返す Do Until EOF(intFF) 改行までをレコードとして読み込む Line Input #intFF, strREC 行を加算しA列にレコード内容を表示(先頭は2行目) Cells(GYO, 1).Value = strREC GYO = GYO + 1 Loop 指定ファイルをCLOSE Close #intFF End Sub 文字列をテキストファイルへ書き出す マクロ Sub WRITE_TextFile() Const cnsFILENAME = "\SAMPLE.txt" Dim intFF As Integer FreeFile値 Dim strREC As String 書き出すレコード内容 FreeFile値の取得(以降この値で入出力する) intFF = FreeFile 指定ファイルをOPEN(出力モード) Open ThisWorkbook.Path cnsFILENAME For Output As #intFF 内容をレコードにセット strREC = "test" レコードを出力 Print #intFF, strREC 指定ファイルをCLOSE Close #intFF End Sub 処理実行中のカーソルを砂時計にする Application.Cursor = xlWait 元に戻すには、 Application.Cursor = xlDefault セルの値を簡易棒グラフで表示する 以下の様な表示。 A列にパーセンテージを入力。 B列に■で棒グラフが作成される。 B列の関数 =LEFT("■■■■■■■■■■",TRUNC($A1/0.1)) ※条件書式で、100%を赤く設定してあります。 エクセルで早口言葉? くだらなすぎ。(自爆) http //www29.atwiki.jp/coraljapan/?cmd=upload act=open page=EXCEL%E8%A6%9A%E3%81%88%E6%9B%B8%E3%81%8D file=20080217_hayakuchi.xls ユーザーフォームのテキストボックス内での制御プロパティ SelLength 選択されたテキストの文字数を設定します。 値の取得も可能です。 SelStart 選択されたテキストの開始点を設定します。 値の取得も可能です。テキストが選択されていないときは、 挿入ポインタの位置を示します。 SelText 現在選択されているテキストを含む文字列を設定します。 値の取得も可能です。文字が選択されていないときは、長さ 0 の文字列 ("") を返します。 例)TextBox1.SelStart = 0 カーソル位置を先頭にします。 ユーザーフォームのテキストボックス内で改行する。 EnterKeyBehaviorをTrueに設定します。 MultiLineもTrueに設定しておく必要があります。 Format関数 Format([値],"[書式設定]") 以下は書式設定 カンマ区切り : #,##0 : 1,234 ¥マーク入り : \\#,##0 : \1,234 単位付き : #,##0\円 : 1,234円 小数点桁数の指定 : #,##0,0000 : 1,234.5670 小数点桁数の指定2 : #,##0,0### : 1,234.567 日付の書式 : YYYY/MM/DD HH NN SS : 2002/11/28 10 18 30 YYYYMMDDをYYYY/MM/DD : @@@@/@@/@@ : 20021128- 2002/11/28 西暦を和暦 : GGGEE\年MM\月DD\日 : 2002/11/28- 平成14年11月28日 和暦を西暦 : YYYY\年MM\月DD\日 : 平成14年11月28日- 2002年11月28日 数値を曜日 : AAAA : 1- 日曜日 四半期を返す : Q : 2002/01- 1 郵便番号 : @@@-@@@@ : 2510871- 251-0871 左に0を充填 : 00000 : 123- 00123 左に半角スペースを充填 : @@@@@ : 123- 123 全部大文字 : : abc- ABC 全部小文字 : : ABC- abc 曜日:aaa:2003/01/30 - 木 カンマ区切りで0なら表示しない #,### 1234- 1,234 0- (表示しない) ユーザーフォームをモードレスで表示する UserForm1.Show vbModeless vbModelessをつけると、ユーザーフォームを表示しながら、セルの選択などができます。 ユーザーフォームで簡易プログレスバーをつくる。 1.Visual Basic Editerを開く。Alt+11 2.メニューの挿入→ユーザーフォームを選択して、フォームを新規作成する。 3.ツールボックスの、「ラベル」で以下のようにラベルを2つと、「コマンドボタン」でボタンを一つ作成する。 4.作成したコマンドボタン上で右ボタンを押して、プロパティを表示して、Captionを「OK」に変更する。 5.ユーザーフォームを選択した状態で、F7を押して、コードを表示する。 6.表示されているコードをすべて削除して、以下のコードを入力する。 Private Sub UserForm_Activate() Label2 = "作業中です..." lb = "■" For i = 0 To 100 Label1 = lb DoEvents lb = lb + "■" ここから処理 For w = 1 To 10000 For x = 1 To 100 Next x Next w ここまで処理 Next i CommandButton1.Enabled = True Label2 = "完了しました。" End Sub Private Sub CommandButton1_Click() Unload Me End Sub 7.Visual Basic Editerを閉じる。 8.新規マクロに以下を入力する。 Sub プログレス() UserForm1.Show End Sub 9.マクロ「プログレス」を実行する。 完成データ DATEVALUE関数とTIMEVALUE関数 指定された文字列からシリアル値を求めるものです。 例) TIMEVALUE("6 0 0") DATEVALUE("2008/2/14") YEAR関数 指定した日付の年を返します。 例)YEAR(Now()) 実行中のマクロを強制終了する。 Dos/V機 [CTRL]+[Break(Pause)] PC9800シリーズ [CTRL]+[STOP] 他のシートのセルの内容を取得する マクロ aaa=Worksheets("Sheet1").Range("A1") シートがアクティブになったら、指定したマクロを実行する。 Sub Auto_Open() Sheet1がアクティブになったら「Macro1」マクロ実行 Worksheets("Sheet1").OnSheetActivate = "Macro1" End Sub 曜日まで表示する表示形式設定 yyyy"年"m"月"d"日("aaa")" シート名一覧を取得するマクロ その2 Sub シート一覧() ct = 1 For I = 1 To Sheets.Count shname = Sheets(I).Name Cells(ct, 1) = shname ct = ct + 1 Next End Sub データの最終行を知る マクロ er = Range("A" 65536).End(xlUp).Row フォルダのコピー マクロ c \001の内容を%temp%\書庫へコピーします。 Sub FolderCopy() Dim SourcFolderSpec, DestFolderSpec, TempFolder As String Dim SourcFolder_Object, DestFolder_Object As Object Dim FileNamePath As Variant 環境変数TEMP を取得します TempFolder = Environ("temp") Source Folder をセットします SourcFolderSpec = "c \001" Destination Folder をセットします DestFolderSpec = TempFolder "\書庫" フォルダオブジェクトを取得 Set SourcFolder_Object = CreateObject _ ("Scripting.FileSystemObject").GetFolder(SourcFolderSpec) SourcFolderSpec内の全ファイルをDestFolderSpecにコピー サブフォルダも対象になります SourcFolder_Object.Copy DestFolderSpec MsgBox "完了しました" End Sub 文字列の操作 =LEFT(文字列,[文字数]) :文字列の左端から指定した文字数だけ取り出す。 文字数を省略すると1を指定したことになります(1の時は省略できる)。 =RIGHT(文字列,[文字数]) :文字列の右端から指定した文字数だけ取り出す。 文字数を省略すると1を指定したことになります(1の時は省略できる)。 =MID (文字列,開始位置,文字数) :文字列の指定した位置から指定した文字数だけ取り出す。 =SEARCH(検索文字列,対象,開始位置) 文字列が開始位置から何番目にあるかを返します 英字の大文字と小文字を区別できませんが、ワイルドカード文字を使用できます。 =FIND(検索文字列,対象,開始位置) 文字列が開始位置から何番目にあるかを返します 英字の大文字と小文字を区別できる代わりに、ワイルドカード文字を使用することができません。 選択したフォルダ内のファイル一覧を取得するマクロ Sub ファイルリスト() Dim filename As String ファイル名 Dim DrvDir As String フォルダパス Dim rw As Long 行カウンタ Dim ShellApp As Object ShellApp Dim myFolder As Object フォルダ名 Set ShellApp = CreateObject("Shell.Application") Set myFolder = ShellApp.BrowseForFolder(0, "フォルダ選択", 1) If myFolder Is Nothing Then Exit Sub DrvDir = myFolder.items.Item.Path "\" フォルダパスをセットする With Worksheets("Sheet1") .Range("A2 A65536").ClearContents 表示用のA列をクリア rw = 1 フォルダを検索してファイルとフォルダを特定する filename = Dir(DrvDir "*.*", vbDirectory) While filename "" 順にSheet1に書き出していく rw = rw + 1 .Range("A" rw) = filename filename = Dir(, vbDirectory) Wend End With End Sub ブックの共有操作のマクロ Sub ブックの共有を解除() ブックの共有を解除 Application.DisplayAlerts = False If ActiveWorkbook.MultiUserEditing Then _ ActiveWorkbook.ExclusiveAccess End Sub Sub ブックの共有をする() ブックの共有をする Application.DisplayAlerts = False ActiveWorkbook.KeepChangeHistory = True ActiveWorkbook.SaveAs Filename =ActiveWorkbook.FullName, _ AccessMode =xlShared End Sub メッセージボックスのアイコン vbCritical 警告メッセージ アイコン vbQuestion 問い合わせメッセージ アイコン vbExclamation 注意メッセージ アイコン vbInformation 情報メッセージ アイコン セル範囲指定で絶対的な座標で指定する INDIRECT("A1 A100")) このように設定すると、行が削除されてもA100は変化しない メッセージボックスで改行する MsgBox "これは" vbCrLf "ペンデス" ステータスバーに表示するマクロ Application.StatusBar = "リスト取得中です...(現在 " rw - 3 "件)" 実行中の自動計算をオフにするマクロ Application.Calculation = xlCalculationManual オンに戻すには以下のマクロ Application.Calculation = xlCalculationAutomatic 実行中の画面の更新を無効にする Application.ScreenUpdating = False 有効にするには、FalseをTrueです 指定した文字列が含まれる行以外を削除するマクロ Sub 行削除() Dim Rwe As Long Dim R As Long Dim delname As String delname = InputBox("検索対象を入力してください", "検索") If delname = "" Then MsgBox "検索を中断します", vbInformation, "検索" End End If Rwe = Range("B" 65536).End(xlUp).Row For R = Rwe To 1 Step -1 To 1では、1行目から検索します If Application.CountIf(Rows(R), "*" delname "*") = 0 Then =0 を 0にすると、検索対象がある行を削除します Rows(R).Delete End If Next MsgBox delname " 以外を除去しました", vbInformation, "検索" End Sub 24時間を越える場合のマクロでの記述 Sub 24over() RT = Int(Range("A1") * 24) " " Format(Range("A1"), "nn ss") MsgBox "経過時間は" RT "です。" End Sub アクティブシートの名前を変更するマクロ ActiveSheet.Name = シート名 アクティブブックのシートをコピーするマクロ Sheets("シート名").Copy シート4の後に追加コピー Sheets("シート名").Copy Before =Sheets(4) ワークシートを別のBOOKへ保存するマクロ あらかじめ、Bookと同じディレクトリに書庫というフォルダを作成しておいてください。 Sub 書庫へ保存() yesno = MsgBox("シートを保存します よろしいですか?", vbYesNo + vbQuestion, "進捗度表") If yesno = vbNo Then End End If wpath = ThisWorkbook.Path "\" パスを設定する sheetname = ActiveWorkbook.ActiveSheet.Name シート名を取得する datenow = Format(Now, "yyyymmdd") 日時を設定 savename = wpath datenow "_" sheetname ".xls" ファイル名設定 savename_msg = datenow "_" sheetname ".xls" 表示用ファイル名設定 Sheets(sheetname).Copy シートを新規ブックへコピー ActiveWorkbook.SaveAs Filename =savename 新規ブックを保存する ActiveWorkbook.Close 新規ブックを閉じる Application.DisplayAlerts = False 警告メッセージオフ Worksheets(sheetname).Delete Application.DisplayAlerts = True 警告メッセージオン MsgBox savename_msg vbCrLf "書庫へ保存しました", vbInformation, "シート保存" End Sub 「はい」「いいえ」ダイアログを表示するマクロ Sub 問い合わせ() yesno = MsgBox("シートを保存します よろしいですか?", vbYesNo + vbQuestion, "問い合わせ") If yesno = vbNo Then End End If End Sub 複数条件のカウント SUMPRODUCT関数 その2 =SUMPRODUCT((A1 A10= 初稿 *(MONTH(B1 B10)=3)*(ISNUMBER(FIND("出版",C1 C10))))) A1 A10が初稿で、B1 B10が3月で、C1 C10の文字列に”出版”という文字を含んでいるならカウントする (解説) ISNUMBER(セル番地または計算式) 参照しているセルが数値かどうか調べる。 数値なら TRUE (1) 数値でないなら FALSE (0) FIND(検索文字列,対象,開始位置) 参照しているセルの検索文字列の位置を調べる 含まれない場合は#VALUEとなる。 複数条件のカウント SUMPRODUCT関数 =SUMPRODUCT((A1 A10= 初稿 )*(MONTH(B1 B10)=3)) A1 A10が初稿でB1 B10が3月ならカウントする シリアル値から日付データ「年」「月」「日」を取り出す =YEAR(シリアル値) =MONTH(シリアル値) =DAY(シリアル値) 範囲内の最大値、最小値を求める 範囲内の最大値 =MAX(範囲) 範囲内の最小値 =MIN(範囲) 例) =MAX(A1 A5) =MIN(B1 B5) =MAX(A1 A5)-MIN(B1 B5) BOOKを開いたら、マクロを自動で実行する Sub Auto_Open() MsgBox "自動です" ここに必要な処理を記述します End Sub ラベルへジャンプするマクロ GoTo ラベル ラベル 例) Sub goto001() If ActiveCell.Value = True Then GoTo msg1 End If End msg1 MsgBox "Trueですよ" End Sub アクティブセルの位置を調べるマクロ 行位置 ActiveCell.Row 列位置 ActiveCell.Column シートをアクティブにするマクロ Worksheets("Sheet1").Activate ワークブックを開くマクロ Workbooks.Open Filename =ThisWorkbook.Path "ファイル名.xls" アクティブセルの内容を取得するマクロ bn = ActiveCell.Value 指定したセルに値を代入するマクロ A5に1を代入 Cells(5,1).Value=1 指定範囲内のセルに値を代入するマクロ A1 C5の範囲に1を代入 Range("a1 c5").Value=1 シート名の一覧を表示するマクロ Sub ListSheetsName() Dim objSheet As Object Dim intLoop As Integer intLoop = 1 For Each objSheet In ActiveWorkbook.Sheets Cells(intLoop, 1).Value = objSheet.Name intLoop = intLoop + 1 Next End Sub (補足) Cells(intLoop, 1).Value = objSheet.Name を Cells(intLoop, 1).Value = objSheet.Range("A1") にすると、参照シート内のA1の内容を持ってこれる。 セルにアクティブシート名を表示する =MID(CELL("filename"),FIND("]",CELL("filename"))+1,31) 重複データを削除する (A1セルにフィールド見出し、A2 A10セルに9個のデータが入力されているときに、重複データを削除した新たなリストをC列に作成する例) メニュー[データ]-[フィルタ]-[フィルタオプションの設定]をクリック ↓ [フィルタオプションの設定]ダイアログで [抽出先]欄で[指定した範囲]オプションボタンをOnに [リスト範囲]欄で「A1 A10」セルを [抽出範囲]欄で「C1」セルを [重複するレコードは無視する]チェックボックスをOnに 設定 ↓ [フィルタオプションの設定]ダイアログ-[OK]ボタンをクリック 参考 http //pc.nikkeibp.co.jp/article/NPC/20060214/229243/ サンプル http //www29.atwiki.jp/coraljapan/?cmd=upload act=open page=EXCEL%E8%A6%9A%E3%81%88%E6%9B%B8%E3%81%8D file=%E6%8A%BD%E5%87%BA.xls 条件にあったものの合計 =SUMIF(B1 B4,"りんご",C1 C4) B1~B4のりんごに該当するもののみ、C1~C4の合計を計算 クリックした図形のセルの色を変えるマクロ 以下のマクロを、セル上の図形に登録する。 Sub iro001() Dim button As Range セル位置取得 button Set button = ActiveSheet.Shapes(Application.Caller).TopLeftCell セル位置 0,0の色を変更 With button.Offset(0, 0).Interior .ColorIndex = 10 .Pattern = xlSolid End With End Sub セルに時間を記録するマクロ A2が開始なら、B2に現在時刻を返す。 A2が終了なら、C2に現在時刻を返す。 Sub jikankiroku() If Range("A2").Value = "開始" Then Range("B2") = Now() End If If Range("A2").Value = "終了" Then Range("C2") = Now() End If End Sub =COUNTIF関数 =COUNTIF(A1 A10,"合格") A1~A10までのセルに「合格」が何個存在するか返す。 =COUNTIF(A1 A10,"合格")+COUNTIF(A1 A10,"不合格") とすると、合格+不合格の合計数が何個あるか返す。 条件付書式 セルの内容によって、書式を変化させる。 例)セルの値が”合格”なら、セルパターン=赤色、文字色=白 IF関数 =IF(A1="","",IF(A1 50,"○","×")) A1が空白なら、空白。 空白以外なら、A1 50をチェック。 50以上なら○ 50以下なら×。 セルのコピー&貼り付け セルが別のセルを指している時に そのセルを別の位置にコピーすると、移動した分だけ指していた位置まで移動してしまう。 これを移動させず、指している位置が変わらないままにするには、変えたくない行・列には「$」を前につけて、「$A$1」といった指定をする。 参考http //www.ne.jp/asahi/hishidama/home/tech/excel/cellcopy.html セル内の文字列をリスト形式で選択 1 [▼]を押して選択するためのリストを別の場所に作成。 2 ドロップダウンリストを表示させたいセルを選択して、メニューバー[データ]から[入力規則]をクリック。 3 [設定]タブの[入力値の種類]で[リスト]を選択し、[元の値]に文字カーソルを移します。 4 ドロップダウンリストの元となる、欄外に入力したデータを範囲選択する。 5 [OK]を押す。 参考http //kokoro.kir.jp/excel/nkisoku_list.html
https://w.atwiki.jp/abpg/pages/40.html
Under Construction EXCEL FORMAT DOWNLOAD. 1.TYPE-POOLS OLE 2.(Definition) DATA AP TYPE OLE2_OBJECT. 3.CREATE OBJECT AP excel.application . 4.CALL METHOD OF AP Workbooks = wb. 5.CALL METHOD OF AP Add . 6.CALL METHOD OF AP Worksheets = sheet exporting #1 = 1 7.CALL METHOD OF Cells = Cells 8.CALL METHOD OF Cells = Select . 9.CALL METHOD OF sheet Range = range Exporting #1 A . 10.CALLMETHOD RANGE Select . Download ClipBoard CALL METHOD CL_GUI_FRONTEND_SERVICES= CLIPBOARD_EXPORT.
https://w.atwiki.jp/redcloud/pages/21.html
目次 目次 前提条件 Excel ~2003 マクロツール 前提条件 Excel ~2003 マクロツール
https://w.atwiki.jp/cz8686/pages/16.html
[ExcelVBA]BOOKクローズ時に保存しないように OwnBook.Saved = True [ExcelVBA]Excelブックをオブジェクト変数にセット //EXCELVBAブックをオブジェクト変数にセット Set OwnBook = ActiveWorkbook Set DataSheet = OwnBook.Worksheets("data") Set TemplateSheet = OwnBook.Worksheets("template") [ExcelVBA]データシートの行数取得 DataSheetRowCnt = DataSheet.Range("A1").CurrentRegion.Rows.Count [ExcelVBA]テキスト取込み Dim j As Integer Worksheets("Sheet1").Select Open "D \MyDocuments\data.txt" For Input As #1 //変数初期化 i = 0 Do Until EOF(1) Input #1, _ myBuf(1), myBuf(2), myBuf(3), myBuf(4), myBuf(5), myBuf(6), myBuf(7), myBuf(8), myBuf(9), myBuf(10), myBuf(11), myBuf(12), myBuf(13), myBuf(14), myBuf(15), myBuf(16), myBuf(17), myBuf(18), myBuf(19), myBuf(20), _ myBuf(21), myBuf(22), myBuf(23), myBuf(24), myBuf(25), myBuf(26), myBuf(27), myBuf(28), myBuf(29), myBuf(30), myBuf(31), myBuf(32), myBuf(33), myBuf(34), myBuf(35), myBuf(36), myBuf(37), myBuf(38), myBuf(39), myBuf(40), _ myBuf(41), myBuf(42), myBuf(43), myBuf(44), myBuf(45), myBuf(46), myBuf(47), myBuf(48), myBuf(49), myBuf(50), myBuf(51), myBuf(52), myBuf(53), myBuf(54), myBuf(55), myBuf(56), myBuf(57), myBuf(58), myBuf(59), myBuf(60), _ myBuf(61), myBuf(62), myBuf(63), myBuf(64), myBuf(65), myBuf(66), myBuf(67), myBuf(68), myBuf(69), myBuf(70), myBuf(71), myBuf(72), myBuf(73), myBuf(74), myBuf(75), myBuf(76), myBuf(77), myBuf(78), myBuf(79), myBuf(80), _ myBuf(81), myBuf(82), myBuf(83), myBuf(84), myBuf(85), myBuf(86), myBuf(87), myBuf(88), myBuf(89), myBuf(90), myBuf(91), myBuf(92), myBuf(93), myBuf(94), myBuf(95), myBuf(96), myBuf(97), myBuf(98), myBuf(99), myBuf(100), _ myBuf(101), myBuf(102), myBuf(103), myBuf(104), myBuf(105), myBuf(106), myBuf(107), myBuf(108), myBuf(109), myBuf(110), myBuf(111), myBuf(112), myBuf(113), myBuf(114), myBuf(115), myBuf(116), myBuf(117), myBuf(118), myBuf(119), myBuf(120), _ myBuf(121), myBuf(122), myBuf(123), myBuf(124), myBuf(125), myBuf(126), myBuf(127), myBuf(128), myBuf(129), myBuf(130), myBuf(131), myBuf(132), myBuf(133), myBuf(134), myBuf(135), myBuf(136), myBuf(137), myBuf(138), myBuf(139), myBuf(140), _ myBuf(141), myBuf(142), myBuf(143), myBuf(144), myBuf(145), myBuf(146), myBuf(147), myBuf(148), myBuf(149), myBuf(150), myBuf(151), myBuf(152), myBuf(153), myBuf(154), myBuf(155), myBuf(156), myBuf(157), myBuf(158), myBuf(159), myBuf(160), _ myBuf(161), myBuf(162), myBuf(163), myBuf(164), myBuf(165), myBuf(166), myBuf(167), myBuf(168), myBuf(169), myBuf(170), myBuf(171), myBuf(172), myBuf(173), myBuf(174), myBuf(175), myBuf(176), myBuf(177), myBuf(178), myBuf(179), myBuf(180), _ myBuf(181), myBuf(182), myBuf(183), myBuf(184), myBuf(185), myBuf(186), myBuf(187), myBuf(188), myBuf(189), myBuf(190), myBuf(191), myBuf(192), myBuf(193), myBuf(194), myBuf(195), myBuf(196), myBuf(197), myBuf(198), myBuf(199), myBuf(200), _ myBuf(201), myBuf(202), myBuf(203), myBuf(204), myBuf(205), myBuf(206), myBuf(207), myBuf(208), myBuf(209), myBuf(210), myBuf(211), myBuf(212), myBuf(213), myBuf(214), myBuf(215), myBuf(216), myBuf(217), myBuf(218), myBuf(219), myBuf(220), _ myBuf(221), myBuf(222), myBuf(223), myBuf(224), myBuf(225), myBuf(226), myBuf(227), myBuf(228), myBuf(229), myBuf(230), myBuf(231), myBuf(232), myBuf(233), myBuf(234), myBuf(235), myBuf(236), myBuf(237), myBuf(238), myBuf(239), myBuf(240), _ myBuf(241), myBuf(242), myBuf(243), myBuf(244), myBuf(245), myBuf(246), myBuf(247), myBuf(248), myBuf(249) i = i + 1 For j = 1 To 249 Cells(i, j) = myBuf(j) Next j Loop Close #1 [ExcelVBA]テキスト出力 Sub outputXML() Dim SaveFilename As String Dim i As Integer Dim DataSheetRowCnt As Integer データ行数取得 DataSheetRowCnt = ActiveWorkbook.Worksheets("Sheet1").Range("A1").CurrentRegion.Rows.Count SaveFilename = Application.GetSaveAsFilename("test", "(*.xml),*.xml", , "結果の保存") SaveFilename = ActiveWorkbook.Path "\" "address.xml" MsgBox SaveFilename vbCr "に出力されました" Open SaveFilename For Output As #1 Print #1, " ?xml version= 1.0 encoding= Shift_JIS ? " Print #1, " ?xml-stylesheet type= text/xsl href= address.xsl ? " Print #1, " 名簿 " For i = 3 To DataSheetRowCnt Print #1, " 連絡先 " Print #1, " 正式名称 "; Cells(i, 1).Value; " /正式名称 " Print #1, " 略称 "; Cells(i, 2).Value; " /略称 " Print #1, " 担当者 "; Cells(i, 3).Value; " /担当者 " Print #1, " 内線 "; Replace(Cells(i, 4).Value, Chr(10), "、"); " /内線 " Print #1, " メールアドレス "; Replace(Cells(i, 5).Value, Chr(10), "、"); " /メールアドレス " Print #1, " 担当システム "; Replace(Cells(i, 6).Value, Chr(10), "、"); " /担当システム " Print #1, " 備考 "; Cells(i, 7).Value; " /備考 " Print #1, " 補足 "; Cells(i, 8).Value; " /補足 " Print #1, " /連絡先 " Next i Print #1, " /名簿 " Close #1 ActiveWorkbook.Save End Sub [ExcelVBA]フォルダ選択ダイアログ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ パブリック変数宣言 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■定数■ /* BrowseForFolder Method Options */ Const BIF_RETURNONLYFSDIRS = H1 // Only return file system directories. ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ フォルダ取得ダイアログを表示する (BrowseForFolder関数) 引数 sTitle タイトルの文字列 nOptions 選択オプションの値 sRootFolder 既定フォルダの文字列 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ Public Function BrowseForFolder(sTitle As String, nOptions, Optional sRootFolder As String = "") As String Dim oShell As Object Dim oFolder As Object Set oShell = CreateObject("Shell.Application") Set oFolder = oShell.BrowseForFolder(0, sTitle, nOptions, sRootFolder) If oFolder Is Nothing Then BrowseForFolder = "" Else If oFolder.ParentFolder Is Nothing Then 下位の未選択デスクトップ Dim objWShell As Object WScript.Shell シェルのオブジェクトを作成 Set objWShell = CreateObject("WScript.Shell") デスクトップの場所を返す BrowseForFolder = objWShell.SpecialFolders("Desktop") オブジェクトの解放 Set objWShell = Nothing Else BrowseForFolder = oFolder.Items.Item.Path パスをセットする End If End If Set oFolder = Nothing Set oShell = Nothing End Function sub 呼び出しがわ() dim PUB_SAVE_FOLDER as String PUB_SAVE_FOLDER = BrowseForFolder(mymsg, BIF_RETURNONLYFSDIRS, "") Msgbox PUB_SAVE_FOLDER end sub [ExcelVBA]改行コードの除去 Sub test() Dim value1 As String value1 = Cells(1, 2) value1 = Replace(value1, Chr(10), "") 改行コードの除去 Chr(10)= LF:改行 MsgBox value1 Cells(2, 1) = value1 End Sub [ExcelVBA]全シート選択・プレビュー Dim i As Integer For i = ActiveWorkbook.Worksheets.Count To 1 Step -1 ActiveWorkbook.Worksheets(i).Select fase Next i ActiveWindow.SelectedSheets [Excel関数]色々 ■(例)セル値が○になっているデータの数をカウントする。 =COUNTIF(E4 E25,"○") ■(例)セル値が空欄の数をカウントする。 =COUNTBLANK(E5 E27)
https://w.atwiki.jp/sevenlives/pages/446.html
Excel【Microsoft Excel】 読み:まいくろそふとえくせる 英語:Microsoft Excel 別名: 意味: エクセルとはMicrosoft社のオフィス用ソフトOffice?の一つの表計算ソフトのこと。 計算したりグラフを作ったり、データを様々に扱う機能に優れている。 VBA?といったプログラム言語も標準装備されており、オリジナルの計算処理(マクロ?)といったことも可能。 CSVなど数々のフォーマット?にも対応しており簡単なデータベースとしても使える。 現在では表計算ソフト?のディファクトスタンダード?といってもいいほど世界に広まっている。 保存ファイルの拡張子は「.xls」 2008年05月29日 マクロ? VBA? ブック セル(Excel)アクティブ・セル ワークシート ゴールシーク? オートフィル
https://w.atwiki.jp/wiki13_kurikuri/pages/121.html
ちょっと覚えておくと便利なExcelのショートカット5つ http //www.popxpop.com/archives/2007/02/excel5.html
https://w.atwiki.jp/hitkik/pages/83.html
現在のアクティブセルの位置を調べる。 y = ActiveCell.Row x = ActiveCell.Column Cells(y, x)でセルの位置を指定する。代入可能。 Cells(y, x).Interior.ColorIndex = 6色の変更 Cells(y, x).Interior.Pattern = xlUpパターンの変更 Cells(y, x).Interior.PatternColorIndex = xlAutomaticパターン色の変更 この値は、マクロを記録してVBAで見るのが簡単。 選択しているセルの範囲を返す Selection.Address ファイルを開くダイアログボックス Application.Dialogs(xlDialogOpen).Show ("ディレクトリパス") Excel VBA sample2 全部のワークシートにページ設定し印刷実行 sub 印刷実行() dim w as worksheet for each w in worksheets if w.name "do not print" then with w.pagesetup .zoom=false .centerfooter=" P/ N page" .fittopageswide=1 end with end if next worksheets.printpreview end sub http //www.geocities.co.jp/HeartLand-Kaede/9186/loan013.html#b 元利均等計算 Excelに用意されている以下の財務ワークシート関数を使用して算出しています。 返済額・融資金額に関してはボーナス併用をサポートしていますが、ボーナス分は無条件に6ヶ月間隔、初回ボーナス返済までの月数6ヶ月として計算されます。 ①返済額 = PMT(金利, 期間, 融資金額) 小数点以下は切り捨てます。 ②融資金額 = PV(返済額、金利、返済期間) 小数点以下は切り捨てます。 ③返済期間 = NPER(融資金額、毎月返済額、金利) 小数点第3位以下は切り捨てます。 ④金利 = RATE(融資金額、毎月返済額、返済期間) 小数点第6位以下は切り捨てます。 なお、③、④は毎月返済額をもとに計算しますので、ボーナス分の金額を入力しても無視します。 ボーナス分の金額で算出したい場合は、概算としてボーナス分融資金額は毎月分融資金額の概ね半分、ボーナス分返済金額は概ねボーナス分返済額の概ね6倍の金額として算出してみてください。
https://w.atwiki.jp/owl_wiki/pages/14.html
グラフの系列、オーダー(桁数)には注意を払うこと ただExcelで作ったグラフは「意味」を持っていない。 きちんと自分の伝えたいことを伝えられるようにグラフに「意味」を持たせること。 加速度同士など同じ種類のデータを、2個のグラフを並べて比較するときには、 必要に応じて縦軸の大きさなどは全てそろえること。 Excelは「表ソフト」ではなく「表計算ソフト」、数式等は有効活用をするように。 PPTにExcelの図を入れてサイズを変更するときは、 必ず図をダブルクリックしてExcelデータが読み込めるような状態で行うこと。 そうしないとフォントサイズなどがずれる。
https://w.atwiki.jp/hosiyomi2/pages/11.html
エクセルのテクニックリンク集 エクセルのテクニック集 http //www.tanabe-be.tanabe.kyoto.jp/world/excel.html エクセル技道場 http //www2.odn.ne.jp/excel/waza/ エクセル図鑑 http //www2.ocn.ne.jp/~excel/zukansab.html
https://w.atwiki.jp/programhack/pages/24.html
Excel関連 左上にカーソルを移動 ショートカットキー [Ctrl] + [Home] 参考サイト http //www.page.sannet.ne.jp/kmiya/ShortCut/Excel.htm